Skip to Content

集中异常处理

功能

  • 确保所有控制器中的异常都能够被捕获和处理,保持异常处理逻辑的集中化,使得代码更加整洁、可维护

实现

  • @ExceptionHandler:捕获给定类型的异常
  • @RestContrllorAdvice@ContrllorAdvice + @RespponseBody
  • @ControllerAdvice:自动捕获所有控制器抛出的异常,实现全局异常处理
  • @ResponseStatus:为自定义异常指定 HTTP 状态码和错误消息,简化异常处理
  • 自定义异常
//创建自定义错误响应体 @Data @AllArgsConstructor public class ErrorResponse { private String message; private int statusCode; } // 创建自定义异常 public class ResourceNotFoundException extends RuntimeException { public ResourceNotFoundException(String message) { super(message); // 调用父类构造函数,并传入 message 参数 } } //创建全局异常处理类 @ControllerAdvice public class GlobalExceptionHandler { // 处理所有的 IllegalArgumentException 异常 @ExceptionHandler(IllegalArgumentException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) // 直接通过注解设置状态码 @ResponseBody // 表示作为HTTP的响应体返回,将结果转换为json格式响应回前端 public ErrorResponse handleIllegalArgumentException(IllegalArgumentException ex) { // 返回自定义的错误响应体 return new ErrorResponse("Invalid argument: " + ex.getMessage(), HttpStatus.BAD_REQUEST.value()); } // 处理所有的 NullPointerException 异常 @ExceptionHandler(NullPointerException.class) @ResponseBody // 表示响应体返回,自动将返回的 Java 对象转化为 JSON 格式 public ResponseEntity<ErrorResponse> handleNullPointerException(NullPointerException ex) { // 构造错误响应体 ErrorResponse errorResponse = new ErrorResponse("Null pointer exception occurred", HttpStatus.INTERNAL_SERVER_ERROR.value()); return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR); // 在响应实体中设置返回状态码 } //处理自定义异常 @ExceptionHandler(ResourceNotFoundException.class) @ResponseBody public ResponseEntity<ErrorResponse> handleResourceNotFoundException(ResourceNotFoundException ex) { // 处理自定义异常,构造错误响应体 ErrorResponse errorResponse = new ErrorResponse(ex.getMessage(), ex.getErrorCode()); // 返回响应实体,包含错误信息和 HTTP 状态码 return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST); } // 处理所有其他未被捕获的异常 @ExceptionHandler(Exception.class) @ResponseBody public ResponseEntity<ErrorResponse> handleGeneralException(Exception ex) { ErrorResponse errorResponse = new ErrorResponse("An unexpected error occurred: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value()); return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR); } }
Last updated on